/*
给定一个含有 n 个正整数的数组和一个正整数 target 。

找出该数组中满足其总和大于等于 target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, numsr] ，
并返回其长度。如果不存在符合条件的子数组，返回 0 。

示例 1：

输入：target = 7, nums = [2,3,1,2,4,3]
输出：2
解释：子数组 [4,3] 是该条件下的长度最小的子数组。
*/
#include<iostream>
#include<vector>
using namespace std;

class Solution {
public:
    int minSubArrayLen(int target, vector<int>& nums) {
        int start = 0;//起始位置
        int size = nums.size();//数组遍历用
        int result = INT32_MAX;
        int sum = 0;
        int sublength = 0;
        for(int end = 0;end<size;end++)//end是终止位置,开始时0
        {
            sum+=nums[end];
            if(sum>=target)
            {
                sublength = end - start + 1;
                result = result < sublength? result: sublength;
                sum-=nums[start];//减去上轮起始值
                start++;//移动起始位置
            }
        }
        return result == INT32_MAX ? 0 : result;
    }
};